/**
 * 顶层页面类，部分依赖Jquery,BootStrap,EasyUI
 * 使用：window.top.xhTop
 */
var xhTop = {
    /**
     * 在顶层窗口弹出模态框
     * --BootStrap.modal
     *
     * @param _options
     * @param _callback
     * @param _callJson
     *
     * create by ck 20170318
     * modify by dale 20180305  width  自定义宽度  必须小于lg,不可拉伸 慎用
     */
    showModal: function(_options, _callback, _callJson){

        //设定默认配置并合并新配置
        var _default = {
            id: 'xh_modal',
            title: '提示',
            content: '',
            size: 'md',
            button: false,
            backClose: true,
            background: true,
            onOpen: null,
            onConfirm: null,
            extraBtn: {},
            width:null,
            footerHtml:false
        };

        _options = $.extend({}, _default, _options);
        var _fadeSize   = _options.size === 'sm' ? ' bs-example-modal-sm' : (_options.size === 'lg' ? ' bs-example-modal-lg' : '');
        var _dialogSize = _options.size === 'sm' ? ' modal-sm' : (_options.size === 'lg' ? ' modal-lg' : '');

        //已存在则删除遮罩层及自身
        //var _modalDom = $('#' + _options.id, window.top.document);
        var _modalDom = $('#' + _options.id);
        if(_modalDom.length > 0){
            _modalDom.siblings('.modal-backdrop').remove();
            _modalDom.modal('hide').remove();
        }
        //组合字符串
        if (_options.width != null) {  //自定义宽度
            var modalStr = '<div class="modal fade  bs-example-modal-lg " id="'+ _options.id +'">';
            modalStr += '<div class="modal-dialog modal-lg" style="width: '+_options.width+'px;">';

        }
        else {
            var modalStr = '<div class="modal fade'+ _fadeSize +'" id="'+ _options.id +'">';
            modalStr += '<div class="modal-dialog'+ _dialogSize +'">';
        }
        modalStr += '<div class="modal-content">';
        modalStr +=     '<div class="modal-header">';
        modalStr +=         '<button id="bt_modal_top_close" type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>';
        modalStr +=         '<h4 class="modal-title">' + _options.title + '</h4>';
        modalStr +=     '</div>';
        if(_options.content){
            modalStr += '<div class="modal-body">';
            modalStr +=     _options.content;
            modalStr += '</div>';
        }
        if(_options.button && !_options.footerHtml){
            modalStr += '<div class="modal-footer">';
            $.each(_options.extraBtn, function (id, name) {
                modalStr +=     '<button type="button" class="btn btn-default" id="' + id + '">' + name + '</button>';
            });
            if(typeof _options.button === 'string'){
                modalStr +=     '<button type="button" class="btn btn-primary xh-btn-load" id="bt_modal_confirm">'+ _options.button +'</button>';
            }
            modalStr +=     '<button type="button" class="btn btn-default" data-dismiss="modal" id="bt_modal_close">关闭</button>';
            modalStr +=  '</div>';
        } else if (_options.footerHtml) {
            modalStr += '<div class="modal-footer">';
            modalStr += _options.footerHtml;
            modalStr +=  '</div>';
        }

        modalStr += '</div></div></div>';

        //添加到body并展示modal
        $(document.body).append(modalStr).find('#' + _options.id).modal(_options.backClose ? 'show' : {backdrop: _options.background ? 'static' : false});

        //需回调则调用回调函数
        if(_callback) {
            _callback.call(this, _callJson);
        }
    },
    /**
     * 关闭顶层窗口模态框
     * --BootStrap.modal
     *
     * create by ck 20170318
     * modify by ck 20170908    更改关闭方法
     */
    closeModal: function() {
        $('#xh_modal').modal('hide');
        // document.querySelector('.modal-header').querySelector('.close').click();
        //$('.modal-header .close', window.top.document).click();
    },
    getModalConfirmDom: function() {
        return $('#bt_modal_confirm').unbind('click');
    },
    getModalCloseDom: function () {
        return $('#bt_modal_close, #bt_modal_top_close').unbind('click');
    },
    /**
     * 绑定modal确认按钮事件
     *
     * @param _callback
     *
     * create by ck 20170810
     */
    bindModalClick: function(_callback) {
        $('#bt_modal_confirm').unbind('click').click(function(){
            _callback.call(this);
        });
    },
    /**
     * 展示消息弹窗
     * --sweetAlert2
     *
     * @param _options
     *
     * create by ck 20170601
     */
    showMessage: function(_options) {
        var _default = {
            title: '',
            text: '',
            type: ''
        };
        if(typeof _options === 'string'){
            if(_options.length > 20){
                _default.text = _options;
            }
            else{
                _default.title = _options;
            }
        }
        else {
            _default = $.extend({}, _default, _options);
        }
        swal(_default);
    },
    /**
     * 展示错误
     * --sweetAlert2
     *
     * @param error
     * @param msg
     *
     * create by ck 20170905
     */
    showError: function (error, msg) {
        swal(error, msg, 'error');
    },
    /**
     * 展示成功
     * --sweetAlert2
     *
     * @param msg
     *
     * create by ck 20170905
     */
    showSuccess: function (msg) {
        swal(msg, null, 'success');
    },
    /**
     * 新建标签页，如果是标签页模式则判断标题已存在，存在则激活
     *
     * @param _title
     * @param _href
     * @param _refresh
     * @param _closeFirst
     *
     * create by ck 20180612
     * modify by ck 20180613    更改id生成规则，url不同则刷新
     */
    createNewTab: function(_title, _href, _refresh, _closeFirst){
        var date = new Date();
        var id = 'xh_tab_' + date.getDay() + date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds()+ Math.round(Math.random() * 10000);
        // var id = 'xh_tab_' + _title.replace('(', '').replace(')', '');
        var create = true;
        $.each(obj.dom.tab.getTabList(), function (index, tab) {
            if (tab.title === _title) {
                obj.dom.tab.setActTab(tab.id).locationTab(tab.id);
                var frame = xhTop.getActiveFrame();
                if (_href.substr(0, 1) !== '/') {
                    _href = '/' + _href;
                }
                // var href  = frame.location.href.substr(frame.location.origin.length + 1);
                if (frame.location.pathname + frame.location.search !== _href) {
                    frame.location.href = _href;
                }
                create = false;
                return false;
            }
        });
        if (!create) {
            return false;
        }
        obj.dom.tab.addTab({
            id: id,
            title: _title,
            content: "<iframe frameborder='0' style='width:100%;height: 100%;' src='" + _href + "'></iframe>",
        }).setActTab(id).locationTab(id);
    },
    /**
     * 新建标签页，如果是标签页模式则判断标题已存在，存在则激活
     * 如果不是标签页浏览，则跳转iframe页面
     * --EasyUI.tabs
     *
     * @param _title        --标签页标题
     * @param _href         --标签页链接
     * @param _refresh      --强制刷新
     * @param _closeFirst   --关闭后打开
     *
     * create by ck 20160902
     * modify by ck 20170318
     * modify by ck 20170414    url为必检查项，如相同且需刷新则刷新
     */
    // createNewTab: function(_title, _href, _refresh, _closeFirst){
        // var _tab = $('#xh_top_tabs');
        // if(_tab.length > 0){
        //     if (_tab.tabs('exists', _title)){
        //         _tab.tabs('select', _title);
        //         var tabIndex = _tab.tabs('getTabIndex', _tab.tabs('getTab', _title));
        //         if (_closeFirst) {
        //             _tab.tabs('close', tabIndex);
        //             xhTop.createNewTab(_title, _href, _refresh, _closeFirst);
        //         }
        //         if(window.frames[tabIndex].location.href !== _href){
        //             window.frames[tabIndex].location.href = _href;
        //             return false;
        //         }
        //         if(_refresh){
        //             window.frames[tabIndex].location.href = window.frames[tabIndex].location.href;
        //         }
        //     } else {
        //         var content = "<iframe frameborder='0'  style='width:100%;' src='" + _href + "'></iframe>";
        //         _tab.tabs('add', {
        //             title:      _title,
        //             content:    content,
        //             closable:   true,
        //             selected:   true
        //         });
        //         //document.querySelector('.tabs-panels').querySelector('.panel:last').querySelector('.panel-body').querySelector('iframe').style.height = '100%';
        //         $('.tabs-panels > .panel:last > .panel-body > iframe').css('height', '100%');          //自适应
        //     }
        //     return false;
        // }
        // if(window.frames[0].location.href !== _href){
        //     window.frames[0].location.href = _href;
        // }
        // return false;
    // },
    /**
     * 获取当前激活iframe页面
     * 如果是页签方式浏览，则查找当前选中页签，计算索引并返回相应iframe
     * 否则直接返回第一个iframe
     *
     * @returns {*}
     *
     * create by ck 20161216
     * modify by ck 20170322
     * modify by ck 20180613
     */
    getActiveFrame: function() {
        return $('#' + obj.dom.tab.getActiveId()).find('iframe')[0].contentWindow
        // var _tab = $('#xh_top_tabs');
        // if(_tab.length > 0){
        //     var tabIndex = _tab.tabs('getTabIndex', _tab.tabs('getSelected'));
        //     return window.frames[tabIndex];
        // }
        // return window.frames[0];
    },
    /**
     * 根据名称获取iframe页面
     *
     * @param _tabName
     * @returns {*}
     *
     * create by ck 20170531
     * modify by ck 20180613
     */
    getFrameByName: function(_tabName) {
        var frame = false;
        $.each(obj.dom.tab.getTabList(), function (index, tab) {
            if (tab.title === _tabName) {
                frame = $(tab.id).find('iframe')[0].contentWindow;
                return false;
            }
        });
        return frame;
        // var _tab = $('#xh_top_tabs');
        // if(_tab.length > 0){
        //     var targetTab = _tab.tabs('getTab', _tabName);
        //     if(targetTab){
        //         var tabIndex = _tab.tabs('getTabIndex', targetTab);
        //         return window.frames[tabIndex];
        //     }
        //     return false;
        // }
        // return window.frames[0];
    },
    /**
     * 关闭当前标签页
     *
     * @returns {boolean}
     *
     * create by ck 20161216
     * modify by ck 20180613
     */
    closeActiveTab: function() {
        obj.dom.tab.delTab(obj.dom.tab.getActiveId());
        // var _tab = $('#xh_top_tabs');
        // if(_tab.length > 0){
        //     var _tabIndex = _tab.tabs('getTabIndex', _tab.tabs('getSelected'));
        //     _tab.tabs('close', _tabIndex);
        // }
        // else{
        //     window.frames[0].history.go(-1);
        // }
        // return false;
    },
    /**
     * 根据页签标题关闭标签，非标签模式则后退
     *
     * @param _tabName
     * @returns {boolean}
     *
     * create by ck 20161009
     * modify by ck 20161020    非标签模式则后退
     * modify by ck 20180613
     */
    closeTabByName: function(_tabName) {
        $.each(obj.dom.tab.getTabList(), function (index, tab) {
            if (tab.title === _tabName) {
                obj.dom.tab.delTab(tab.id);
                return false;
            }
        });
        // var _tab = $('#xh_top_tabs');
        // if(_tab.length > 0){
        //     var _tabIndex = _tab.tabs('getTabIndex', _tab.tabs('getTab', _tabName));
        //     _tab.tabs('close', _tabIndex);
        // }
        // else{
        //     window.frames[0].history.go(-1);
        // }
        // return false;
    },
    /**
     * 获取当前激活页签
     *
     * @returns {string}
     *
     * create by ck 20180813
     */
    getActiveTabName: function () {
        var title = '';
        var tabs = obj.dom.tab.getTabList();
        if (tabs.length <= 1) {
            return title;
        }
        var id = obj.dom.tab.getActiveId();
        $.each(tabs, function (index, tab) {
            if (tab.id === '#' + id) {
                title = tab.title;
                return false;
            }
        });
        return title;
    },
    /**
     * 根据名称获取配置信息
     *
     * @param _configName
     * @returns {{}}
     *
     * create by ck 20170421
     */
    getConfigByName: function(_configName) {
        if(!_configName) return {};
        var _config = {};
        $.ajax({
            type : 'get',
            url : baseUrl + 'Config/getConfigByName/' + _configName,
            async : false,
            dataType: 'json',
            success : function(data){
                _config = data;
            }
        });
        return _config;
    }

};